package com.wframe.project.former.task;

import java.lang.annotation.*;

/**
 * Created by lwb on 2017/5/19.
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface RedisLock {
    /**
     * redis的key
     *
     * @return
     */
    String value();

    /**
     * 持锁时间,单位毫秒,默认一分钟
     */
    long expireMills() default 60000;

    /**
     * 当获取失败时候动作
     */
    LockFailAction action() default LockFailAction.CONTINUE;

    enum LockFailAction {
        /**
         * 放弃
         */
        GIVEUP,
        /**
         * 继续
         */
        CONTINUE;
    }

    /**
     * 睡眠时间,设置GIVEUP忽略此项
     *
     * @return
     */
    long sleepMills() default 1000;

    /**
     * 锁获取超时时间
     *
     * @return
     */
    long maxTimeoutMills() default 0;
}
